//priority 50
/**
 * 基础的技能类实现了最基础的函数
*/
function BaseEntry(name) {
    this.name = name;
    this.ConfigPath = "kubejs/config/Entry/"//配置文件路径
    this.DefaultConfig = {//默认配置文件
    }
    this.Config = {}//配置文件
}
//获取类的名称
BaseEntry.prototype.getName = function () {
    return this.name
};
//获取类的本地化键值，arguments代表不定长参数
BaseEntry.prototype.getText = function () {
    return Text.translate("rpg.monster.entry." + this.getName() + ".text", arguments[0] + "")
};

//配置文件相关
//读写配置文件
BaseEntry.prototype.ReadConfig = function () {
    this.Config = global.jsonHelper.readOrCreateFile(this.ConfigPath + this.getName() + ".json", this.DefaultConfig)
}

//词条初始化时候进行调用
BaseEntry.prototype.init = function () {
    this.ReadConfig()
    return this;
}

//词条应用相关函数
//怪物初始化的时候保存的自定义数据
BaseEntry.prototype.SaveData = function (nbt, monster, level) {
    let Data = new $CompoundTag()
    Data.put("level", level)//将词条等级保存
    nbt.put(this.getName(), Data)
}
//怪物加载时候对怪物名称的修改
BaseEntry.prototype.ChangeName = function (nbt, name, monster, level) {
    name.unshift(this.getText(level), " ")//将词条等级放在名字前面
}

//return pass时候继续执行其他词条tick
//return succeed时候中断执行，执行成功
//return error时候中断执行，执行失败
//怪物加载词条的时候初始化调用（succeed，error无效果）
BaseEntry.prototype.apply = function (nbt, monster, level) {
    return global.EntryResult.pass()
}
//每tick自动执行的函数（error无效果）
BaseEntry.prototype.tick = function (nbt, monster, level) {
    return global.EntryResult.pass()
}
//死亡的时候自动执行的函数（error时候怪物不会死亡）
BaseEntry.prototype.death = function (nbt, monster, level) {
    return global.EntryResult.pass()
}
//攻击的时候触发的函数
BaseEntry.prototype.attack = function (nbt, monster, level, message) {
    return global.EntryResult.pass()
}
//防御的时候触发的函数（error时候完全阻止伤害）
BaseEntry.prototype.defense = function (nbt, monster, level, message) {
    return global.EntryResult.pass()
}

//治愈的时候触发的函数（error时候完全阻止治愈）
BaseEntry.prototype.heal = function (nbt, monster, level, message) {
    return global.EntryResult.pass()
}

// var a = new BaseEntry("test").init()

//注册技能自身
// global.EntryHelper.RegisterEntry(a).AddToEntryGroup(a, "testgroup")